package database;

import groupmanagement.AnmeldeStatus;
import groupmanagement.IGruppe;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import partnermanagement.Geschlecht;
import partnermanagement.IEltern;
import partnermanagement.IKind;
import partnermanagement.Kind;
import superkigav.shared.rightsmanagement.UserTicket;

public class KindDAO implements IKindDAO {
	private  IDBConnector idbconnector;
	private IElternDAO elternDAO;
	
	public KindDAO(){
		this.idbconnector = DBConnectorMySQL.getInstance();
		this.elternDAO =  new ElternDAO();
	}
	
	/* (non-Javadoc)
	 * @see database.IKindDAO#addKind(partnermanagement.IKind)
	 */
	@Override
	public void addKind(IKind kind, UserTicket ut){
		// TODO
	}
	
	/* (non-Javadoc)
	 * @see database.IKindDAO#updateKind(partnermanagement.IKind)
	 */
	@Override
	public void updateKind(IKind kind, UserTicket ut){
		// TODO
	}
	
	@Override
	public void deleteKind(IKind kind, UserTicket ut) {
		// TODO Auto-generated method stub
		
	}
	
	/* (non-Javadoc)
	 * @see database.IKindDAO#findAll()
	 */
	@Override
	public List<IKind> findAll(UserTicket ut){
		ResultSet resultSet = null;
		try {
			
			String Statement = ("select * from Kind;");
			resultSet = idbconnector.query(Statement);
		 } catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		return buildKinder(resultSet);
	}
	
	/* (non-Javadoc)
	 * @see database.IKindDAO#getKinderByEltern(partnermanagement.IEltern, superkigav.shared.rightsmanagement.UserTicket)
	 */
	@Override
	public List<IKind> getKinderByEltern(IEltern eltern, UserTicket ut) {
		ResultSet resultSet = null;
            
		try {
			
			String Statement = ("select * from Kind where Eltern = '"+eltern.getUsername() + ";");
			resultSet = idbconnector.query(Statement);
			
		
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return buildKinder(resultSet);
    }
	
	//String Statement = ("select * from Gruppe where Gruppe.idGruppe in (select Anmeldung.idGruppe from Anmeldung where Anmeldung.idKind = " + KindID + " and Gruppe.idGruppe = Anmeldung.idGruppe) ;");
//	public Map<AnmeldeStatus, List<IKind>> getKinderByGruppe(IGruppe gruppe, UserTicket ut) {
//		ResultSet resultSetAngemeldet = null;
//		ResultSet resultSetWarteliste = null;
//		Map<AnmeldeStatus, List<IKind>> result = new HashMap<AnmeldeStatus, List<IKind>>();
//		
//                // TODO wieder Umwandlung, konform zu GetEltern, int -> String für den Username
//                String gruppenname = String.valueOf(gruppe.getId());
//		try {
//			
//			String Statement = ("select * from Kind where Kind.idKind in (select Anmeldung.idKind from Anmeldung where Anmeldung.idGruppe = " + gruppenname + " and Kind.idKind = Anmeldung.idKind and Anmeldung.Status = 'ANGEMELDET') ;");
//			
//			resultSetAngemeldet = idbconnector.query(Statement);
//			
//			Statement = ("select * from Kind where Kind.idKind in (select Anmeldung.idKind from Anmeldung where Anmeldung.idGruppe = " + gruppenname + " and Kind.idKind = Anmeldung.idKind and Anmeldung.Status = 'WARTELISTE') ;");
//			resultSetWarteliste = idbconnector.query(Statement);
//		
//		} catch (SQLException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//		
//		result.put(AnmeldeStatus.ANGEMELDET,buildKinder(resultSetAngemeldet));
//		result.put(AnmeldeStatus.WARTELISTE,buildKinder(resultSetWarteliste));
//		return result;
//    }
	
	private List<IKind> buildKinder(ResultSet resultSet){
		 List<IKind> result = new ArrayList<IKind>();
		 try {
		while (resultSet.next()) {
            int KindID = resultSet.getInt("idKind");
            String Vorname = resultSet.getString("Vorname");
            String Nachname = resultSet.getString("Nachname");
            Geschlecht geschlecht = Geschlecht.valueOf(resultSet.getString("Geschlecht"));
           
            IKind kind = new Kind(KindID, null, Vorname, Nachname, geschlecht);
            IEltern eltern = elternDAO.getElternByKind(kind);
            kind.setEltern(eltern);
                                    
                                      
            result.add(kind);
        }	
		 } catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		return result;
	}


	
}
